home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh -e
- # This script mounts a user's confidential private folder
- #
- # Original by Michael Halcrow, IBM
- # Extracted to a stand-alone script by Dustin Kirkland <kirkland@canonical.com>
- #
- # This script:
- # * interactively prompts for a user's wrapping passphrase (defaults to their
- # login passphrase)
- # * checks it for validity
- # * unwraps a users mount passphrase with their supplied wrapping passphrase
- # * inserts the mount passphrase into the keyring
- # * and mounts a user's encrypted private folder
-
- PRIVATE_DIR="Private"
- WRAPPING_PASS="LOGIN"
- PW_ATTEMPTS=3
- TEXTDOMAIN="ecryptfs-utils"
- MESSAGE=`gettext "Enter your login passphrase:"`
-
- if [ -f $HOME/.ecryptfs/wrapping-independent ]; then
- # use a wrapping passphrase different from the login passphrase
- WRAPPING_PASS="INDEPENDENT"
- MESSAGE=`gettext "Enter your wrapping passphrase:"`
- fi
-
- WRAPPED_PASSPHRASE_FILE="$HOME/.ecryptfs/wrapped-passphrase"
- MOUNT_PASSPHRASE_SIG_FILE="$HOME/.ecryptfs/$PRIVATE_DIR.sig"
-
- # First, silently try to perform the mount, which would succeed if the appropriate
- # key is available in the keyring
- if /sbin/mount.ecryptfs_private >/dev/null 2>&1; then
- exit 0
- fi
-
- # Otherwise, interactively prompt for the user's password
- if [ -f "$WRAPPED_PASSPHRASE_FILE" -a -f "$MOUNT_PASSPHRASE_SIG_FILE" ]; then
- tries=0
- stty_orig=`stty -g`
- while [ $tries -lt $PW_ATTEMPTS ]; do
- echo -n "$MESSAGE"
- stty -echo
- LOGINPASS=`head -n1`
- stty $stty_orig
- echo
- if printf "%s\0" "$LOGINPASS" | ecryptfs-insert-wrapped-passphrase-into-keyring "$WRAPPED_PASSPHRASE_FILE" - ; then
- break
- else
- echo `gettext "ERROR:"` `gettext "Your passphrase is incorrect"`
- tries=$(($tries + 1))
- continue
- fi
- done
- if [ $tries -ge $PW_ATTEMPTS ]; then
- echo `gettext "ERROR:"` `gettext "Too many incorrect password attempts, exiting"`
- exit 1
- fi
- /sbin/mount.ecryptfs_private
- else
- echo `gettext "ERROR:"` `gettext "Encrypted private directory is not setup properly"`
- exit 1
- fi
- if grep -qs "$HOME/.Private $PWD ecryptfs " /proc/mounts 2>/dev/null; then
- echo
- echo `gettext "INFO:"` `gettext "Your private directory has been mounted."`
- echo `gettext "INFO:"` `gettext "To see this change in your current shell:"`
- echo " cd $PWD"
- echo
- fi
- exit 0
-